﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcadPosApp.Utilidades;
using AcadPos.Entity;
using System.Data;

namespace AcadPosApp.Cadastros
{
    public partial class CadastroAdminPolo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregarBancos();
                TxtPesquisa.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultar.ClientID + "')");
            }
            if (gvwPesquisa.Visible == true && gvwPesquisa.SelectedIndex > -1)
                btnTitulacao.Visible = true;
            else
                btnTitulacao.Visible = false;
        }

        private void carregarBancos()
        {
            ddlBanco.DataSource = ControlClass.CNBanco.carregarBancos();
            ddlBanco.DataTextField = "DESCRICAO";
            ddlBanco.DataValueField = "ID_BANCO";
            ddlBanco.DataBind();
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            pnlEdicao.Visible = true;
            pnlConsulta.Enabled = false;
            TrustX.Util.UtilForm.LimparCampos(pnlEdicao);
            TxtNacionalidade.Text = "BRASILEIRA";
            btnConfirmar.CommandName = "Incluir";
            ddlUF.SelectedItem.Text = "SE";
            ddlUFEnd.SelectedItem.Text = "SE";
            ddlUFNaturalidade.SelectedItem.Text = "SE";
        }

        protected void btnConsultarCEP_Click(object sender, EventArgs e)
        {

            TrustX.DadosEndereco dadosEndereco = new TrustX.DadosEndereco();
            dadosEndereco = TrustX.Util.UtilForm.ObterDadosEndereco(TxtCEP.Text);
            if (dadosEndereco.Cidade != null)
            {
                TxtCidade.Text = dadosEndereco.Cidade;
                TxtBairro.Text = dadosEndereco.Bairro;
                TxtEndereco.Text = dadosEndereco.Endereco;
                ddlUFEnd.SelectedValue = dadosEndereco.Estado;
            }
            else
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, dadosEndereco.MsgRetorno)), true);
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            carregarAdministradores();
            pnlCadastroTitulacao.Visible = false;
            pnlConsulta.Enabled = true;
            gvwPesquisa.SelectedIndex = -1;
        }

        private void carregarAdministradores()
        {
            gvwPesquisa.DataSource = ControlClass.CNAdministrador.listarAdministradores(TxtPesquisa.Text);
            gvwPesquisa.DataBind();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlEdicao.Visible = false;
            pnlConsulta.Enabled = true;
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                string usuario = User.Identity.Name;
                Administrador admin = new Administrador();
                admin.Agencia = TxtAgencia.Text;
                admin.Bairro = TxtBairro.Text;
                admin.Celular = TxtCelular.Text;
                admin.Cep = TxtCEP.Text;
                admin.Cidade = TxtCidade.Text;
                admin.CodBanco = Convert.ToInt32(ddlBanco.SelectedValue);
                admin.Complemento = TxtComplemento.Text;
                admin.Conta = TxtConta.Text;
                admin.Cpf = TxtCPF.Text;
                admin.DataExpedicao = Convert.ToDateTime(TxtDataExpedicao.Text);
                admin.DddCel = TxtDDDCel.Text;
                admin.DddTel = TxtDDDTel.Text;
                admin.Email = TxtEmail.Text;
                admin.Endereco = TxtEndereco.Text;
                admin.EstadoCivil = ddlEstadoCivil.SelectedValue;
                admin.Genero = ddlGenero.SelectedValue;
                admin.Mae = TxtMae.Text;
                admin.Nacionalidade = TxtNacionalidade.Text;
                admin.Naturalidade = TxtNaturalidade.Text;
                admin.Nome = TxtNome.Text;
                if (TxtNumero.Text != string.Empty)
                    admin.Numero = Convert.ToInt32(TxtNumero.Text);
                else admin.Numero = 0;
                admin.NumeroISS = TxtISS.Text;
                admin.NumeroPIS = TxtPIS.Text;
                admin.OrgaoExpedidor = TxtOrgaoExpedidor.Text;
                admin.Pai = TxtPai.Text;
                admin.RegistroProf = TxtRegProf.Text;
                admin.Rg = TxtRG.Text;
                admin.Situacao = ddlSituacao.SelectedValue;
                admin.Telefone = TxtTelefone.Text;
                admin.UfEndereco = ddlUFEnd.SelectedValue;
                admin.UfNaturalidade = ddlUFNaturalidade.SelectedValue;
                admin.UfRG = ddlUF.SelectedValue;
                if (btnConfirmar.CommandName == "Incluir")
                {
                    if (ControlClass.CNAdministrador.inserirAdministrador(admin, usuario))
                    {
                        pnlEdicao.Visible = false;
                        pnlConsulta.Enabled = true;
                        carregarAdministradores();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                    }
                }
                else if (btnConfirmar.CommandName == "Alterar")
                {
                    admin.Codigo = Convert.ToInt32(ViewState["ID_ADMINISTRADOR"]);

                    if (ControlClass.CNAdministrador.alterarAdministrador(admin, usuario))
                    {
                        pnlEdicao.Visible = false;
                        pnlConsulta.Enabled = true;
                        carregarAdministradores();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
            }
        }

        protected void TxtCPF_TextChanged(object sender, EventArgs e)
        {
            if (!MetodosAuxiliares.IsCpfValid(TxtCPF.Text) && (TxtCPF.Text != ""))
            {
                TxtCPF.Focus();
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "CPF inválido!"), true);
            }
            else if (ControlClass.CNAdministrador.verificarAdminJaCadastrado(TxtCPF.Text))
            {
                pnlEdicao.Visible = false;
                pnlConsulta.Enabled = true;
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Administrador já cadastrado com CPF informado."), true);
            }

        }

        protected void gvwPesquisa_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwPesquisa_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            #region Configurando Alert de Confirmação
            // Passando por todas as linhas
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
            #endregion

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[5].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[5].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[5].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[5].Visible = false;
            }
            #endregion
        }

        protected void gvwPesquisa_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                Administrador admin = new Administrador();
                int index = int.Parse((String)e.CommandArgument);
                admin.Codigo = Convert.ToInt32(gvwPesquisa.DataKeys[index]["ID_ADMINISTRADOR"].ToString());
                string usuario = User.Identity.Name;

                if (e.CommandName == "Alterar")
                {
                    admin = ControlClass.CNAdministrador.carregarDadosAdministrador(admin.Codigo);
                    pnlEdicao.Visible = true;
                    pnlConsulta.Enabled = false;
                    TxtAgencia.Text = admin.Agencia;
                    TxtBairro.Text = admin.Bairro;
                    TxtCelular.Text = admin.Celular.Trim();
                    TxtCEP.Text = admin.Cep;
                    TxtCidade.Text = admin.Cidade;
                    TxtComplemento.Text = admin.Complemento;
                    TxtConta.Text = admin.Conta;
                    TxtCPF.Text = admin.Cpf;
                    // TxtDataExpedicao.Text = admin.DataExpedicao.ToString().Substring(0,10);
                    TxtDataExpedicao.Text = admin.DataExpedicao.ToShortDateString();
                    TxtDDDCel.Text = admin.DddCel.Trim();
                    TxtDDDTel.Text = admin.DddTel.Trim();
                    TxtEmail.Text = admin.Email;
                    TxtEndereco.Text = admin.Endereco;
                    if (admin.NumeroISS != string.Empty)
                        TxtISS.Text = admin.NumeroISS.ToString();
                    TxtMae.Text = admin.Mae;
                    TxtNacionalidade.Text = admin.Nacionalidade;
                    TxtNaturalidade.Text = admin.Naturalidade;
                    TxtNome.Text = admin.Nome;
                    if (admin.Numero > 0)
                        TxtNumero.Text = admin.Numero.ToString();
                    TxtOrgaoExpedidor.Text = admin.OrgaoExpedidor;
                    TxtPai.Text = admin.Pai;
                    TxtPIS.Text = admin.NumeroPIS;
                    TxtRegProf.Text = admin.RegistroProf;
                    TxtRG.Text = admin.Rg;
                    TxtTelefone.Text = admin.Telefone;
                    if (admin.CodBanco > 0)
                        ddlBanco.SelectedValue = admin.CodBanco.ToString();
                    ddlEstadoCivil.SelectedValue = admin.EstadoCivil;
                    ddlGenero.SelectedValue = admin.Genero;
                    ddlSituacao.SelectedValue = admin.Situacao;
                    ddlUF.SelectedValue = admin.UfRG;
                    ddlUFEnd.SelectedValue = admin.UfEndereco;
                    ddlUFNaturalidade.SelectedValue = admin.UfNaturalidade;
                    ViewState["ID_ADMINISTRADOR"] = admin.Codigo;
                    btnConfirmar.CommandName = "Alterar";
                }
                else if (e.CommandName == "Excluir")
                {
                    admin = ControlClass.CNAdministrador.carregarDadosAdministrador(admin.Codigo);
                    
                    if (ControlClass.CNAdministrador.excluirAdministrador(admin, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarAdministradores();
                        pnlEdicao.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                        pnlEdicao.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                }

            }
            catch (Exception ex)
            {
                if (ex.Message.ToString().Contains("FK_TB_POLO_TB_ESTADO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroChaveEstrangeira, "")), true);
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, ex.Message.ToString())), true);
                pnlEdicao.Visible = false;
                pnlConsulta.Enabled = true;
            }
        }

        protected void btnTitulacao_Click(object sender, EventArgs e)
        {
            pnlEdicao.Visible = false;            
            pnlTitulacoes.Visible = true;
            pnlConsulta.Enabled = false;
            TrustX.Util.UtilForm.LimparCampos(pnlTitulacoes);
            carregarTitulacoes();
        }

        private void carregarTitulacoes()
        {
            int idAdministrador = Convert.ToInt32(gvwPesquisa.SelectedDataKey["ID_ADMINISTRADOR"]);
            gvwTitulacoes.DataSource = ControlClass.CNAdministrador.getTitulacoes(idAdministrador);
            gvwTitulacoes.DataBind();
        }

        protected void btnInserirTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadastroTitulacao.Visible = true;
            TrustX.Util.UtilForm.LimparCampos(pnlCadastroTitulacao);
            btnConfirmarTitulacao.CommandName = "Incluir";
            carregarNiveisTitulacao();
            carregarAnoConclusao();
        }

        private void carregarAnoConclusao()
        {
            ddlAnoConclusao.Items.Clear();
            for (int i = 1960; i < DateTime.Now.Year + 1; i++)
            {
                ddlAnoConclusao.Items.Add(i.ToString());
            }
            ddlAnoConclusao.SelectedIndex = DateTime.Now.Year - 1960;
        }

        private void carregarNiveisTitulacao()
        {
            ddlNivelTitulacao.Items.Clear();
            DataTable dtTitulacoes = ControlClass.CNNivelTitulacao.listarNiveisTitulacao("");
            DataView dtTitualcoesAtivas = dtTitulacoes.AsDataView();
            dtTitualcoesAtivas.RowFilter = "SITUACAO = 'A' ";
            ddlNivelTitulacao.DataValueField = "ID_NIVEL_TITULACAO";
            ddlNivelTitulacao.DataTextField = "NIVEL";
            ddlNivelTitulacao.DataSource = dtTitualcoesAtivas.ToTable();
            ddlNivelTitulacao.DataBind();
        }

        protected void btnCancelarTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadastroTitulacao.Visible = false;            
        }

        protected void btnConfirmarTitulacao_Click(object sender, EventArgs e)
        {
            try
            {
                Titulacao titulacao = new Titulacao();
                titulacao.AnoConclusao = Convert.ToInt32(ddlAnoConclusao.SelectedValue);
                titulacao.CodNivelTitulacao = Convert.ToInt32(ddlNivelTitulacao.SelectedValue);
                titulacao.CodAdministrador = Convert.ToInt32(gvwPesquisa.SelectedDataKey["ID_ADMINISTRADOR"]);
                titulacao.Instituicao = TxtInstituicao.Text;
                titulacao.Titulo = TxtTitulacao.Text;
                titulacao.Situacao = ddlSituacaoTitulacao.SelectedValue;
                if (btnConfirmarTitulacao.CommandName == "Incluir")
                {
                    if (ControlClass.CNAdministrador.incluirTitulacao(titulacao))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        pnlCadastroTitulacao.Visible = false;                       
                        carregarTitulacoes();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                        pnlCadastroTitulacao.Visible = false;
                    }
                }
                else if (btnConfirmarTitulacao.CommandName == "Alterar")
                {
                    titulacao.Codigo = Convert.ToInt32(ViewState["ID_ADMINISTRADOR_TITULACAO"]);
                    if (ControlClass.CNAdministrador.alterarTitulacao(titulacao))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                        pnlCadastroTitulacao.Visible = false;                       
                        carregarTitulacoes();
                    }
                }
            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }

        protected void gvwTitulacoes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                Titulacao titulacao = new Titulacao();
                int index = int.Parse((String)e.CommandArgument);
                titulacao.Codigo = Convert.ToInt32(gvwTitulacoes.DataKeys[index]["ID_ADMINISTRADOR_TITULACAO"].ToString());
                if (e.CommandName == "Alterar")
                {
                    titulacao = ControlClass.CNAdministrador.getDadosTitulacao(titulacao.Codigo);
                    carregarNiveisTitulacao();
                    carregarAnoConclusao();
                    pnlCadastroTitulacao.Visible = true;
                    pnlConsulta.Enabled = false;
                    ddlNivelTitulacao.SelectedValue = titulacao.CodNivelTitulacao.ToString();
                    ddlAnoConclusao.SelectedValue = titulacao.AnoConclusao.ToString();
                    ddlSituacaoTitulacao.SelectedValue = titulacao.Situacao;
                    TxtTitulacao.Text = titulacao.Titulo;
                    TxtInstituicao.Text = titulacao.Instituicao;
                    ViewState["ID_ADMINISTRADOR_TITULACAO"] = titulacao.Codigo;
                    btnConfirmarTitulacao.CommandName = "Alterar";
                }
                else if (e.CommandName == "Excluir")
                {
                    if (ControlClass.CNAdministrador.excluirTitulacao(titulacao.Codigo))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarTitulacoes();
                        pnlCadastroTitulacao.Visible = false;                        
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK_TB_ADMINISTRADOR_TITULACAO_TB_NIVEL_TITULACAO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else if (ex.Message.Contains("FK_TB_ADMINISTRADOR_TITULACAO_TB_ADMINISTRADOR"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                pnlCadastroTitulacao.Visible = false;
                pnlConsulta.Enabled = true;
            }
        }

        protected void gvwTitulacoes_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwTitulacoes_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[5].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[7].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[7].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[7].Visible = false;
            }
            #endregion
        }

        protected void gvwPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (gvwPesquisa.SelectedIndex > -1)
                btnTitulacao.Visible = true;
            else
                btnTitulacao.Visible = false;
        }

        protected void btnCancelarInclusaoTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadastroTitulacao.Visible = false;
            pnlTitulacoes.Visible = false;
            pnlConsulta.Enabled = true;
            gvwPesquisa.SelectedIndex = -1;
            btnTitulacao.Visible = false;
        }
    }
}